Docker docker-composeの.envとenv_fileの違い
「docker-composeで立ち上げるコンテナ内に環境変数を設定したい」と思って方法を調べていた。
そこで出会った...docker-composeでは環境変数の捉え方が2種類あるようだ。
Qiitaにも記事になっており「勘違いしてる」人が多い。
自分も混乱したので、ここに備忘録として残しておく。
「docker-compose.ymlに与える環境変数」と「docker-composeが立ち上げたコンテナの環境変数」
hr.icon
2つの環境変数の存在を覚えておくことが大事
1つは「docker-copompose.ymlに与える環境変数」
docker-compose.yml内で参照して利用するホストの環境変数の事を指す
環境変数の利用法
code: docker-compose.yml
version: '3'
services:
web:
image: 'webapp:${TAG}'
上の例だと、TAGというホストの環境変数をdocker-comopose.yml内で利用している
環境変数の与え方
1. ホスト側で環境変数を設定する
$ export ENV=dev
2. .envファイルをdocker-compose.ymlと同じ階層に置いておく
code: .env
ENV=dev
3. docker-compose時に--env_fileオプションを付けて.envの代わりにファイルを指定する
利用される環境変数の優先順位
1. ホストで設定した環境変数
2. .envファイル
もう1つが「docker-composeが立ち上げたコンテナの環境変数」
docker-composeのbuildか何かによって実際に立ち上げられたコンテナの環境変数の事を指す
与え方は2つある
1. environmentプロパティ
code: docker-compose.yml
version: '3'
services:
web:
build: .
environment:
- ENV=dev
- DEBUG=True
2. env_fileプロパティ
code: docker-compose.yml
version: '3'
services:
web:
build: .
env_file: env.prod
code: env.prod
ENV=dev
DEBUG=True
参考